package com.javaex.book.utils;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

/**
 * JWT工具类
 *
 * @author 黄星琦
 * @Date 2022年4月27日
 */
public class JwtUtils {
	
	private static final Logger logger = LoggerFactory.getLogger(JwtUtils.class);
	
	/** Token加密字符串 */
	private static final String TOKEN_SECRET = "token_secret";
	
	/** Token默认过期时间：30分钟 */
	public static final long DEFAULT_TOKEN_EXPIRE_TIME = 30 * 60 * 1000;
	
	/**
	 * 生成Token
	 * @param key Token中携带的数据的key
	 * @param value Token中携带的数据
	 * @return 生成的Token
	 */
	public static String createToken(String key, String value) {
		Date date = new Date(System.currentTimeMillis() + DEFAULT_TOKEN_EXPIRE_TIME);
		return JWT.create()
				.withClaim(key, value)
				.withExpiresAt(date)
				.sign(Algorithm.HMAC256(TOKEN_SECRET));
	}
	
	/**
	 * 校验Token
	 * @param token	Token
	 * @param key 用于获取Token中携带的数据
	 * @return Token中携带的数据
	 */
	public static String verifyToken(String token, String key) {
		try {
			DecodedJWT jwt = JWT.require(Algorithm.HMAC256(TOKEN_SECRET))
					.build()
					.verify(token);
			if (key != null) {
				return jwt.getClaim(token).asString();
			}
		} catch (Exception e) {
			logger.error("Token过期了", e);
		}
		return null;
	}
}
